import * as express from 'express';
import { Product } from './shared/product';
import { Comment } from './shared/Comment';
import {Server} from 'ws';
import { Client } from '_debugger';

//定义一个示例的产品对象数组
let products:Product[] = [
    new Product(1,'第一件商品',25.3,'第一件商品的基础描述信息',1,['电子产品','软件产品']),
    new Product(2,'第二件商品',25.3,'第一件商品的基础描述信息',2,['保健品','食品']),
    new Product(3,'第三件商品',25.3,'第一件商品的基础描述信息',5,['书籍','杂志']),
    new Product(4,'第三件商品',25.3,'第一件商品的基础描述信息',4,['汽车配件']),
    new Product(5,'第三件商品',25.3,'第一件商品的基础描述信息',4,['服饰','男装'])
  ];

//产品的评论信息
let comments:Comment[] = [
    new Comment(1,1,'20170302','happykala',3,'产品不错值得拥有'),
    new Comment(1,1,'20170302','happykala',3,'产品不错值得拥有'),
    new Comment(1,2,'20170302','happykala',3,'产品不错值得拥有'),
    new Comment(1,2,'20170302','happykala',3,'产品不错值得拥有'),
    new Comment(1,2,'20170302','happykala',3,'产品不错值得拥有'),
    new Comment(1,3,'20170302','happykala',3,'产品不错值得拥有'),
    new Comment(1,3,'20170302','happykala',3,'产品不错值得拥有'),
    new Comment(1,3,'20170302','happykala',3,'产品不错值得拥有')
];  


const app = express();

//首页路由请求
app.get('/',(req,res)=>{
    res.send('Hello Express');
});
//获取产品的基础信息
app.get('/api/products',(req,res)=>{
    res.json(products);
});
//获取特定id产品的信息
app.get('/api/product/:id',(req,res) =>{
    var _objProduct = products.filter((product) => product.id == req.params.id)
    res.json(_objProduct);
});
//获取特定的产品对应的评论信息
app.get('/api/product/:id/comments',(req,res) =>{
    res.json(comments.filter((comment:Comment) => comment.productId == req.params.id));
})




//启动监听
app.listen(8000,'localhost',function(){
    console.log('服务器已经启动!!!!!!');
})


//定义一个socket通信的服务器
const wsServer = new Server({port:8085});
wsServer.on('connection',webSocket =>{
    //服务器端向客户端发送消息
    webSocket.send('这个是服务器发给客户端的消息');
    //服务器端接收客户端发送的下消息并打印在控制台上
    webSocket.on('message',message =>{console.log(message)})
});

//定时器函数每隔两秒钟向目前连接在服务端的客户端发送一条广播消息
setInterval(() => {
    if(wsServer.clients){
        wsServer.clients.forEach(Client => {
            Client.send('服务器定时推送的消息');
        })
    }
},2000);







